#define _CRT_SECURE_NO_WARNINGS

//typedef struct
//{
//    int front;
//    int rear;
//    int* a;
//    int k;
//} MyCircularQueue;
//
//
//MyCircularQueue* myCircularQueueCreate(int k)
//{
//    MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
//    obj->a = (int*)malloc(sizeof(int) * (k + 1));
//    obj->front = obj->rear = 0;
//    obj->k = k;
//    return obj;
//}
//
//bool myCircularQueueIsEmpty(MyCircularQueue* obj)
//{
//    return obj->front == obj->rear;
//}
//
//bool myCircularQueueIsFull(MyCircularQueue* obj)
//{
//    return obj->front == (obj->rear + 1) % (obj->k + 1);
//}
//
//bool myCircularQueueEnQueue(MyCircularQueue* obj, int value)
//{
//    if (myCircularQueueIsFull(obj))
//    {
//        return false;
//    }
//    obj->a[obj->rear] = value;
//    obj->rear++;
//    obj->rear %= obj->k + 1;
//    return true;
//}
//
//bool myCircularQueueDeQueue(MyCircularQueue* obj)
//{
//    if (myCircularQueueIsEmpty(obj))
//    {
//        return false;
//    }
//    obj->front++;
//    obj->front %= obj->k + 1;
//    return true;
//}
//
//int myCircularQueueFront(MyCircularQueue* obj)
//{
//    if (myCircularQueueIsEmpty(obj))
//    {
//        return -1;
//    }
//    return obj->a[obj->front];
//}
//
//int myCircularQueueRear(MyCircularQueue* obj)
//{
//    if (myCircularQueueIsEmpty(obj))
//    {
//        return -1;
//    }
//    return obj->a[(obj->rear + obj->k) % (obj->k + 1)];
//}
//
//void myCircularQueueFree(MyCircularQueue* obj)
//{
//    free(obj->a);
//    obj->a = NULL;
//    free(obj);
//
//}